//
//  UserAccount.swift
//  新浪微博
//
//  Created by MBP on 16/5/16.
//  Copyright © 2016年 MBP. All rights reserved.
//

import UIKit

let PNweiboUserAccountKey = "UserAccountInfo"

class UserAccount: NSObject {
    
    //用户账户单例, 全局入口
    static let sharedUserAccount = UserAccount()
    
    //用户是否登录的标记
    var isLogin: Bool {
        return access_token != nil
    }

    /// 用于调用access_token，接口获取授权后的access token
    var access_token: String?
    /// 从创建应用程序开始计算！
    var expires_in: NSTimeInterval = 0 {
        didSet {
            // 计算过期日期
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
    /// 过期日期
    var expiresDate: NSDate?
    /// 当前授权用户的UID
    var uid: String?
    /// 用户昵称
    var screen_name: String?
    /// 用户头像地址（大图），180×180像素
    var avatar_large: String?
    
    
    /// 重写构造函数, 使用private修饰, 避免外界通过()创建对象.
    private override init() {
        super.init()
        
        loadUserAccount()
    }
    
    /// 字典转模型
    init(dict:[String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    //防止出错
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    //重写description
    override var description: String {
        //模型转字典
        let keys = ["access_token", "expires_in", "expiresDate", "uid", "avatar_large", "screen_name"]
        return dictionaryWithValuesForKeys(keys).description
    }
}

extension UserAccount {
    //使用字典更新模型数据
    func updateUserAccount(dict: [String: AnyObject]) {
        setValuesForKeysWithDictionary(dict)
        
        saveUserAccount()
    }
    //保存用户数据
    func saveUserAccount() {
        //将模型转成字典
        let keys = ["access_token", "expiresDate", "uid", "avatar_large", "screen_name"]
        let dict = dictionaryWithValuesForKeys(keys)
        
        //将字典保存到偏好设置中
        NSUserDefaults.standardUserDefaults().setObject(dict, forKey: PNweiboUserAccountKey)
        //同步
        NSUserDefaults.standardUserDefaults().synchronize()
        
        //打印路径, 手动查看保存结果
        print(NSHomeDirectory())
    }
    
    private func loadUserAccount() {
        //从偏好加载字典
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(PNweiboUserAccountKey) as? [String: AnyObject] else {
            return
        }
        //字典转模型
        setValuesForKeysWithDictionary(dict)
        
        //判断token是否过期
        if isExpired {
            print("token已经过期")
            access_token = nil
        }else {
            print("token可以使用")
        }
    }
    
    //判断token是否过期的属性
    private var isExpired: Bool {
        // 将过期日期和当前系统日起进行比较
        // 举个栗子
        // 2016-01-01
        // 2016-02-15
        // 2016-12-30
        return expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedAscending
    }
}
